{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "d8fdb577",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import math\n",
    "from tqdm import tqdm\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "format_data = {\n",
    "        \"device_id\":[],\n",
    "        \"cpu_id\":[],\n",
    "        \"record_id\":[],\n",
    "        \"timestamp\":[],\n",
    "        \"process_id\":[],\n",
    "        \"trace_action\":[],\n",
    "        \"operation_type\":[], #N操作的时候，没有扇区num，没有IOsize，只有进程name\n",
    "        \"sector_num\":[],\n",
    "        \"IO_size\":[],\n",
    "        \"process_name\":[]\n",
    "    }"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "761f0925",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(19335542, 1)\n",
      "                                                   0\n",
      "0  259,2   25   579660   462.569664498  4021  D  ...\n",
      "1  259,2   16   734356   462.569664532  4032  I  ...\n",
      "2  259,2   16   734357   462.569665430  4032  D  ...\n",
      "3  259,2    9   725967   462.569668845     0  C  ...\n",
      "4  259,2   22   557143   462.569690322  4057  Q  ...\n"
     ]
    }
   ],
   "source": [
    "def get_data():\n",
    "    data = pd.read_csv('../data_set/map-2.csv',delimiter ='\\t',header=None)\n",
    "    #data = pd.read_csv('../data_set/ssdtrace-sample',delimiter ='\\t',header=None)\n",
    "    return data   \n",
    "data = get_data()\n",
    "print(data.shape)\n",
    "print(data.head())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "6e97156b",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████| 19335542/19335542 [01:59<00:00, 162459.16it/s]\n"
     ]
    }
   ],
   "source": [
    "def get_format_data(data):\n",
    "    global error_data\n",
    "    all_data = []\n",
    "    error_data = []\n",
    "    for line in tqdm(data[0]):\n",
    "        lst = line.split(' ')\n",
    "        true_data = []\n",
    "        for i in lst:\n",
    "            if len(i)>0 :\n",
    "                #print(i)\n",
    "                true_data.append(i)\n",
    "        if len(true_data)>6:\n",
    "            all_data.append(true_data)\n",
    "        else:\n",
    "            error_data.append(true_data)\n",
    "    return all_data\n",
    "lst_data = get_format_data(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "628c8b50",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[['259,2', '25', '579660', '462.569664498', '4021', 'D', 'RS', '740614936', '+', '16', '[java]'], ['259,2', '16', '734356', '462.569664532', '4032', 'I', 'RS', '179907696', '+', '8', '[java]'], ['259,2', '16', '734357', '462.569665430', '4032', 'D', 'RS', '179907696', '+', '8', '[java]'], ['259,2', '9', '725967', '462.569668845', '0', 'C', 'RS', '730698800', '+', '16', '[0]'], ['259,2', '22', '557143', '462.569690322', '4057', 'Q', 'R', '507615216', '+', '8', '[rocksdb:bg21]']]\n",
      "[]\n"
     ]
    }
   ],
   "source": [
    "print(lst_data[:5])\n",
    "print(error_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "bd0c8132",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'WFS', 'N'}\n"
     ]
    }
   ],
   "source": [
    "tp = set()\n",
    "\n",
    "for lst in lst_data:\n",
    "    if len(lst)<=9:\n",
    "        tp.add(lst[6])\n",
    "    if len(lst)<=9 and lst[6]==\"WS\": #可以看出WS类型的没有sector number  IO size为0  属于0号进程\n",
    "        print(lst)\n",
    "print(tp)  # 说明这四种情况下 没有后续的内容"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "508ce2b3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "19335542\n",
      "19335542\n",
      "19335542\n",
      "19335542\n",
      "19335542\n",
      "19335542\n",
      "19335542\n",
      "19335542\n",
      "19335542\n",
      "19335542\n"
     ]
    }
   ],
   "source": [
    "\n",
    "for lst in lst_data:\n",
    "\n",
    "    if lst[6]!='N' and lst[6]!=\"FWS\" and lst[6]!=\"WFS\" and  lst[6]!=\"WS\":#不是这个分支\n",
    "        format_data[\"device_id\"].append(lst[0])\n",
    "        format_data[\"cpu_id\"].append(lst[1])\n",
    "        format_data[\"record_id\"].append(lst[2])\n",
    "        format_data[\"timestamp\"].append(lst[3])\n",
    "        format_data[\"process_id\"].append(lst[4])\n",
    "        format_data[\"trace_action\"].append(lst[5])\n",
    "        format_data[\"operation_type\"].append(lst[6])\n",
    "        format_data[\"sector_num\"].append(lst[7])\n",
    "        format_data[\"IO_size\"].append(lst[9])\n",
    "        format_data[\"process_name\"].append(lst[-1])\n",
    "\n",
    "    else:\n",
    "        if lst[6]=='N':#不是这个分支\n",
    "            format_data[\"device_id\"].append(lst[0])\n",
    "            format_data[\"cpu_id\"].append(lst[1])\n",
    "            format_data[\"record_id\"].append(lst[2])\n",
    "            format_data[\"timestamp\"].append(lst[3])\n",
    "            format_data[\"process_id\"].append(lst[4])\n",
    "            format_data[\"trace_action\"].append(lst[5])\n",
    "            format_data[\"operation_type\"].append(lst[6]) #N\n",
    "            format_data[\"sector_num\"].append(0)\n",
    "            format_data[\"IO_size\"].append(0)\n",
    "            format_data[\"process_name\"].append(lst[-1])\n",
    "        elif lst[6]==\"WFS\": #不是这个分支\n",
    "            \n",
    "            if lst[8]!=\"+\":\n",
    "            #['259,2', '19', '3996', '7.120903570', '0', 'C', 'WFS', '499613064', '[0]']\n",
    "                format_data[\"device_id\"].append(lst[0])\n",
    "                format_data[\"cpu_id\"].append(lst[1])\n",
    "                format_data[\"record_id\"].append(lst[2])\n",
    "                format_data[\"timestamp\"].append(lst[3])\n",
    "                format_data[\"process_id\"].append(lst[4])\n",
    "                format_data[\"trace_action\"].append(lst[5])\n",
    "                format_data[\"operation_type\"].append(lst[6]) \n",
    "                format_data[\"sector_num\"].append(lst[7])\n",
    "                format_data[\"IO_size\"].append(0)\n",
    "                format_data[\"process_name\"].append(lst[-1])\n",
    "            else:\n",
    "                #['259,2', '1', '13708', '27.635742637', '1062', 'D', 'WFS', '499617592', '+', '8', '[kworker/1:1H]']\n",
    "                #['259,2', '1', '13710', '27.639087693', '4053', 'C', 'WFS', '499617592', '+', '8', '[0]']\n",
    "                format_data[\"device_id\"].append(lst[0])\n",
    "                format_data[\"cpu_id\"].append(lst[1])\n",
    "                format_data[\"record_id\"].append(lst[2])\n",
    "                format_data[\"timestamp\"].append(lst[3])\n",
    "                format_data[\"process_id\"].append(lst[4])\n",
    "                format_data[\"trace_action\"].append(lst[5])\n",
    "                format_data[\"operation_type\"].append(lst[6])\n",
    "                format_data[\"sector_num\"].append(lst[7])\n",
    "                format_data[\"IO_size\"].append(lst[9])\n",
    "                format_data[\"process_name\"].append(lst[-1])\n",
    "        elif lst[6]==\"WS\":#不是这个分支\n",
    "            if lst[-1]==\"[0]\":\n",
    "            #['259,2', '1', '64942', '132.546605808', '4086', 'C', 'WS', '0', '[0]']\n",
    "                format_data[\"device_id\"].append(lst[0])\n",
    "                format_data[\"cpu_id\"].append(lst[1])\n",
    "                format_data[\"record_id\"].append(lst[2])\n",
    "                format_data[\"timestamp\"].append(lst[3])\n",
    "                format_data[\"process_id\"].append(lst[4])\n",
    "                format_data[\"trace_action\"].append(lst[5])\n",
    "                format_data[\"operation_type\"].append(lst[6]) \n",
    "                format_data[\"sector_num\"].append(0) #用不到\n",
    "                format_data[\"IO_size\"].append(0)\n",
    "                format_data[\"process_name\"].append(lst[-1])\n",
    "            else: \n",
    "                format_data[\"device_id\"].append(lst[0])\n",
    "                format_data[\"cpu_id\"].append(lst[1])\n",
    "                format_data[\"record_id\"].append(lst[2])\n",
    "                format_data[\"timestamp\"].append(lst[3])\n",
    "                format_data[\"process_id\"].append(lst[4])\n",
    "                format_data[\"trace_action\"].append(lst[5])\n",
    "                format_data[\"operation_type\"].append(lst[6])\n",
    "                format_data[\"sector_num\"].append(lst[7])\n",
    "                format_data[\"IO_size\"].append(lst[9])\n",
    "                format_data[\"process_name\"].append(lst[-1])\n",
    "            #['259,2', '2', '2638', '1.641824430', '4020', 'Q', 'WS', '7487488', '+', '2048', '[java]']\n",
    "        elif lst[6]==\"FWS\":\n",
    "            #['259,2', '1', '64940', '132.545984928', '4092', 'Q', 'FWS', '[rocksdb:bg0]']\n",
    "            format_data[\"device_id\"].append(lst[0])\n",
    "            format_data[\"cpu_id\"].append(lst[1])\n",
    "            format_data[\"record_id\"].append(lst[2])\n",
    "            format_data[\"timestamp\"].append(lst[3])\n",
    "            format_data[\"process_id\"].append(lst[4])\n",
    "            format_data[\"trace_action\"].append(lst[5])\n",
    "            format_data[\"operation_type\"].append(lst[6]) \n",
    "            format_data[\"sector_num\"].append(0) #用不到\n",
    "            format_data[\"IO_size\"].append(0)#用不到\n",
    "            format_data[\"process_name\"].append(lst[-1])\n",
    "            \n",
    "\n",
    "\n",
    "print(len(format_data[\"device_id\"]))\n",
    "print(len(format_data[\"cpu_id\"]))\n",
    "print(len(format_data[\"record_id\"]))\n",
    "print(len(format_data[\"timestamp\"]))\n",
    "print(len(format_data[\"process_id\"]))\n",
    "print(len(format_data[\"trace_action\"]))\n",
    "print(len(format_data[\"operation_type\"]))\n",
    "print(len(format_data[\"sector_num\"]))\n",
    "print(len(format_data[\"IO_size\"]))\n",
    "print(len(format_data[\"process_name\"]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "0dfb1268",
   "metadata": {},
   "outputs": [],
   "source": [
    "                \n",
    "column_name = [ \"device_id\",\n",
    " \"cpu_id\",\n",
    " \"record_id\",\n",
    " \"timestamp\",\n",
    " \"process_id\",\n",
    " \"trace_action\",\n",
    " \"operation_type\",\n",
    " \"sector_num\",\n",
    " \"IO_size\",\n",
    " \"process_name\"]\n",
    "data = pd.DataFrame(format_data,columns=column_name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "be2cb67d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "19335542"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "load1_request_num = data.shape[0]\n",
    "load1_request_num"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "4b623777",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████| 19335542/19335542 [01:42<00:00, 187777.57it/s]\n",
      "100%|██████████████████████████████████████████████████████████████████| 19335542/19335542 [01:42<00:00, 189111.91it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最大时间数是: 687\n",
      "最小时间数是: 462\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|█████████████████████████████████████████████████████████████████████████████████| 23/23 [48:32<00:00, 126.61s/it]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'request_amount')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "def cnt_r_1s(beginS,deltaSecond=1):#以1s为单位  beginS 应该是float   计算[beginS,beginS+deltaSecond] 时间段内的读请求数目\n",
    "#     beginS = eval(beginS)\n",
    "    read_data = data[data[\"operation_type\"]==\"R\"]  \n",
    "    syn_read_data =  data[data[\"operation_type\"]==\"RS\"]\n",
    "    ahead_read_data  = data[data[\"operation_type\"]==\"A\"]#预读也算\n",
    "    cnt = 0\n",
    "    for occur_time in read_data[\"timestamp\"]:\n",
    "        occur_time = eval(occur_time)\n",
    "        if occur_time>=beginS and occur_time<beginS+deltaSecond:#这里是deltaSecond = 1s  是应该加1  而不是1000\n",
    "            cnt+=1\n",
    "    for occur_time in syn_read_data[\"timestamp\"]:\n",
    "        occur_time = eval(occur_time)\n",
    "        if occur_time>=beginS and occur_time<beginS+deltaSecond:#这里是1s  是应该加1  而不是1000\n",
    "            cnt+=1\n",
    "    for occur_time in ahead_read_data[\"timestamp\"]:\n",
    "        occur_time = eval(occur_time)\n",
    "        if occur_time>=beginS and occur_time<beginS+deltaSecond:#这里是1s  是应该加1  而不是1000\n",
    "            cnt+=1\n",
    "    return cnt\n",
    "                \n",
    "def cnt_w_1s(beginS,deltaSecond=1):\n",
    "#     beginS = eval(beginS) \n",
    "    write_data = data[data[\"operation_type\"]==\"W\"]  \n",
    "    cnt = 0\n",
    "    for occur_time in write_data[\"timestamp\"]:\n",
    "        occur_time = eval(occur_time)\n",
    "        if occur_time>=beginS and occur_time<beginS+deltaSecond:#这里是1s  是应该加1  而不是1000\n",
    "            cnt+=1\n",
    "    return cnt\n",
    "\n",
    "def getMaxTime(timestamp_lst):\n",
    "    #传入的是整个数据的timestamp列\n",
    "    lst = []\n",
    "    for i in tqdm(timestamp_lst):\n",
    "        lst.append(eval(i))\n",
    "    return max(lst)\n",
    "\n",
    "def getMinTime(timestamp_lst):\n",
    "    lst = []\n",
    "    for i in tqdm(timestamp_lst):\n",
    "        lst.append(eval(i))\n",
    "    return min(lst)\n",
    "\n",
    "\n",
    "#随时间的变化图  要求per second  所以是1s\n",
    "def generate_time_Xaxis(deltaSecond=1): #interval:区间的个数\n",
    "    endS = math.ceil(getMaxTime(data[\"timestamp\"])) #endSecond (已向上取整)\n",
    "    beginS = int(getMinTime(data[\"timestamp\"]))\n",
    "    print(\"最大时间数是:\",endS)\n",
    "    print(\"最小时间数是:\",beginS)\n",
    "    X_axis = [i for i in range(beginS,endS+1,deltaSecond)]\n",
    "    #print(\"X_axis\",X_axis)\n",
    "    return X_axis\n",
    "def generate_y_axis(x_axis):\n",
    "    y_axis = []\n",
    "    global read_cnt\n",
    "    global write_cnt\n",
    "    read_cnt = []  #每秒的read请求个数\n",
    "    write_cnt = [] #每秒的write请求个数\n",
    "    from tqdm import tqdm\n",
    "    for i in tqdm(range(len(x_axis))):\n",
    "        read_cnt.append(cnt_r_1s(x_axis[i]))\n",
    "        write_cnt.append(cnt_w_1s(x_axis[i]))\n",
    "\n",
    "    \n",
    "\n",
    "x_axis = generate_time_Xaxis(10) #本负载均可使用此x轴(per second)\n",
    "generate_y_axis(x_axis) #根据x对应的时间生成\n",
    "\n",
    "plt.plot(x_axis, read_cnt, marker='o', markersize=3)  # 绘制折线图，添加数据点，设置点的大小\n",
    "plt.plot(x_axis, write_cnt, marker='o', markersize=3)\n",
    "plt.legend(['read_amount', 'write_amount'])  # 设置折线名称\n",
    "plt.title(\"numbers of read and write request per second\")\n",
    "plt.xlabel(\"time_stamp\")\n",
    "plt.ylabel(\"request_amount\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "d9e9dda7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "读写请求比例为: no write request\n"
     ]
    }
   ],
   "source": [
    "if sum(write_cnt)!=0:\n",
    "    read_write_ratio = sum(read_cnt)/sum(write_cnt)\n",
    "else:\n",
    "    read_write_ratio = \"no write request\"\n",
    "print(\"读写请求比例为:\",read_write_ratio)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "4e17e63b",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████| 19335542/19335542 [01:38<00:00, 197059.32it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "平均IOPS： 28166.943035921566\n"
     ]
    }
   ],
   "source": [
    "# 任务 3 ：计算平均IOPS\n",
    "AVG_IOPS = load1_request_num / getMaxTime(data[\"timestamp\"]) \n",
    "print(\"平均IOPS：\",AVG_IOPS)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "a61c830a",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████████| 23/23 [37:43<00:00, 98.42s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "y轴请求数目数组: [84212, 72649, 175305, 79737, 83613, 17418, 184057, 172045, 99153, 5644, 32867, 80842, 32128, 65697, 89823, 17081, 174110, 103900, 10157, 101348, 28484, 86403, 2351]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'request_amount')"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 任务4：负载的IOPS随时间变化示意图？（画图显示结果，参考示列3）？\n",
    "\n",
    "# per second \n",
    "def cnt_request_per_delta(beginS,deltaSecond=1): \n",
    "    cnt = 0\n",
    "    for occur_time in data[\"timestamp\"]:\n",
    "        occur_time = eval(occur_time)\n",
    "        if occur_time>=beginS and occur_time<beginS+deltaSecond:#这里是1s  是应该加1  而不是1000\n",
    "            cnt+=1\n",
    "    return cnt\n",
    "\n",
    "y_axis_request_cnt = []\n",
    "for i in tqdm(range(len(x_axis))): \n",
    "    y_axis_request_cnt.append(cnt_request_per_delta(x_axis[i]))\n",
    "print(\"y轴请求数目数组:\",y_axis_request_cnt)\n",
    "\n",
    "plt.plot(x_axis, y_axis_request_cnt, marker='o', markersize=3)  # 绘制折线图，添加数据点，设置点的大小\n",
    "plt.title(\"numbers of I/O request per second\")\n",
    "plt.xlabel(\"time_stamp\")\n",
    "plt.ylabel(\"request_amount\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "878667d0",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████| 19335542/19335542 [01:41<00:00, 190961.49it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x_axis_per_hour: [0, 1]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      " 50%|█████████████████████████████████████████▌                                         | 1/2 [01:41<01:41, 101.16s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "y_axis_request_cnt_per_hour: [19335542] hour: 0\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|████████████████████████████████████████████████████████████████████████████████████| 2/2 [03:18<00:00, 99.07s/it]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "y_axis_request_cnt_per_hour: [19335542, 0] hour: 1\n",
      "y轴请求数目数组: [19335542, 0]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "# per hour\n",
    "def generate_time_Xaxis_per_hour(deltaHour=1): #interval:区间的个数\n",
    "    endS = math.ceil(getMaxTime(data[\"timestamp\"])/3600) #endSecond (已向上取整)\n",
    "    X_axis = [i for i in range(endS+1)]\n",
    "    #print(\"X_axis\",X_axis)\n",
    "    return X_axis\n",
    "x_axis_per_hour = generate_time_Xaxis_per_hour() \n",
    "print(\"x_axis_per_hour:\",x_axis_per_hour)\n",
    "\n",
    "y_axis_request_cnt_per_hour = []\n",
    "for i in tqdm(range(len(x_axis_per_hour))): \n",
    "    y_axis_request_cnt_per_hour.append(cnt_request_per_delta(x_axis_per_hour[i]*3600,3600)) #求出各个小时内请求的数量\n",
    "    print(\"y_axis_request_cnt_per_hour:\",y_axis_request_cnt_per_hour,\"hour:\",x_axis_per_hour[i])\n",
    "print(\"y轴请求数目数组:\",y_axis_request_cnt_per_hour)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "eaf67510",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|█████████████████████████████████████████████████████████████████| 19335542/19335542 [00:13<00:00, 1473939.06it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "         16        8  0   168     72       24      40     88      32     56  \\\n",
      "0  10140022  3146524  1  7826  53649  1813235  148688  37324  247723  94492   \n",
      "\n",
      "   ...  1648  1200  1208  1936  544  1904  1296  664  536  1024  \n",
      "0  ...     4     4     8     4    4     4     8    8    8     4  \n",
      "\n",
      "[1 rows x 204 columns]\n",
      "平均请求大小为: 36.07980081447937\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "y_axis_IOsize_frequency = {}\n",
    "for item in tqdm(data[\"IO_size\"]):\n",
    "    if y_axis_IOsize_frequency.get(item)==None:\n",
    "        temp = {str(item):[1]} #全部转为字符串  使用list是为了便于转为datafrmae\n",
    "        y_axis_IOsize_frequency.update(temp)\n",
    "    else:\n",
    "        (y_axis_IOsize_frequency[str(item)])[0]+=1\n",
    "        \n",
    "# print(y_axis_IOsize_frequency.keys())\n",
    "\n",
    "IO_SIZE_TABLE = {\n",
    "    \"请求大小\":list(y_axis_IOsize_frequency.keys()),\n",
    "    \"出现次数\":list(y_axis_IOsize_frequency.values())\n",
    "}\n",
    "IO_SIZE_TABLE = pd.DataFrame(y_axis_IOsize_frequency)\n",
    "print(IO_SIZE_TABLE)\n",
    "\n",
    "\n",
    "#load1_request_num #总的请求数目\n",
    "IO_SIZE_SUM = 0\n",
    "for key,value in y_axis_IOsize_frequency.items():\n",
    "    IO_SIZE_SUM+=eval(key)*value[0]\n",
    "AVG_IO_SIZE = IO_SIZE_SUM / load1_request_num\n",
    "print(\"平均请求大小为:\",AVG_IO_SIZE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e9d237f9",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6bef0e7d",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6996621b",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8ae17cab",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d6a939a5",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
